iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 23
0
AI & Data

時間管理大師-時間序列分析終極密技系列 第 23

[Day23]一肩擔盡古今愁-時間序列分析開始,資料清理實戰

  • 分享至 

  • xImage
  •  

今天我們要正式來實踐資料清理,資料源是台中市政府資料開放平台公有零售市場每日蔬果價格填報
連結在這

載入資料

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt 
 
data = pd.read_csv("./GOLD_109.csv")
print(data)

非常混亂,一看就知道不清理會很難做事

            訪價日期    市場名稱    絲瓜  花胡瓜  結球白菜  蘿蔔  胡蘿蔔     青蔥  胡瓜  青江白菜  空心菜  甘藍  香蕉  番石榴_珍珠 鳳梨_開英  荔枝_黑葉  火龍果_紅肉  芒果_愛文   木瓜  文旦  新世紀梨  檸檬  ...  花椰菜    洋蔥   大蒜  吳郭魚  虱目魚  金目鱸  龍虎班  午仔魚   白蝦   文蛤  里肌肉  後腿肉  五花肉  牛腱_冷凍牛肉  腿肉_冷凍牛肉  腩肉_冷凍牛肉  雞蛋  鴨蛋   肉雞   土雞   仿雞  鴨_土番鴨
0     21/03/2020    沙鹿市場  25.0   20    25  20   18   50.0  30    25   25  30   0       0     0      0       0      0    0   0     0   0  ...   30  30.0  120   50  100  200  260  200  350  120  160  130  160      220      220      240  30  32  130  140  130    130
1     22/03/2020    第五市場  50.0    0    40  50   30   50.0  40    75    0   0  30      60     0      0       0      0   80   0     0  70  ...    0   0.0    0    0    0    0    0    0    0    0    0    0    0        0        0        0   0   0    0    0    0      0
2     22/03/2020  大甲第二市場  35.0   38    25  28   28   30.0  30    20    0  20   0       0     0      0       0      0   55   0     0  50  ...    0   0.0    0    0    0    0    0    0    0    0    0    0    0        0        0        0   0   0    0    0    0      0
3     22/03/2020    南屯市場  45.0   35    15  18   22   45.0  30    15   38  15  40      50    40      0       0     60  100   0     0  60  ...    0   0.0    0    0    0    0    0    0    0    0    0    0    0        0        0        0   0   0    0    0    0      0
4     22/03/2020    東光市場  40.0   55    28  25   25   50.0  35    35   30  20  35      39     0      0      75    120   39   0     0  50  ...    0   0.0    0    0    0    0    0    0    0    0    0    0    0        0        0        0   0   0    0    0    0      0
...          ...     ...   ...  ...   ...  ..  ...    ...  ..   ...  ...  ..  ..     ...   ...    ...     ...    ...  ...  ..   ...  ..  ...  ...   ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...  ...      ...      ...      ...  ..  ..  ...  ...  ...    ...
2007  04/10/2020    沙鹿市場  25.0   35    22  25   18  110.0  25    18   20  40   0       0     0      0       0      0    0   0     0   0  ...   40  25.0  190   65  130  190    0  165  310  100  135  125  145        0        0        0  33  42    0  130  120    135
2008  05/10/2020    建國市場  30.0   30    25  25   20   40.0  20    20   20  30  15      30    25      0      45     80   30  40   100  25  ...   60  25.0   80   64   96   80  144  190  220  120  120   80  120      180      150      180  33  50   80   72   75     72
2009  05/10/2020  清水第一市場   2.0   50    35  25   25   40.0  30    25   20  25  20      50     0      0      70      0   50  35     0   0  ...   50  25.0  220   55   80  100    0  170  200   90  135  110  125      200      220      250  39  45   90  110  110     90
2010  05/10/2020    沙鹿市場  25.0   35    22  25   18  100.0  25    20   20  40   0       0     0      0       0      0    0   0     0   0  ...   35  25.0  190   65  130  190    0  165  310  100  130  120  140        0        0        0  33  43    0  130  120    135
2011  05/10/2020    中義市場  28.0   55    30  25   30   80.0  35    40   30  45  15      34     0      0      40     65   34  39     0  20  ...   60  35.0  100    4    8    6   10   10   10    9  110  100  125      190      200      200  38  60  120  140  120    110

[2012 rows x 63 columns]

我們作人做事不要太貪婪,我們今天分析豐原第一市場的資料就好,這就需要使用到篩選資料的功能了

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt 

if __name__ == "__main__":
    data = pd.read_csv("./GOLD_109.csv")
    mask = data["市場名稱"] == "豐原第一市場"
    data = data[mask].copy()
 訪價日期    市場名稱    絲瓜  花胡瓜  結球白菜  蘿蔔  ...  雞蛋  鴨蛋  肉雞   土雞   仿雞  鴨_土番鴨
27    24/03/2020  豐原第一市場  45.0   60    25  25  ...  38  56  80  100  100    340
40    25/03/2020  豐原第一市場  45.0   60    25  25  ...  38  56  80  100  100    340
52    26/03/2020  豐原第一市場  45.0   60    25  25  ...  38  56  80  100  100    340
63    27/03/2020  豐原第一市場  45.0   60    25  25  ...  38  56  80  100  100    340
77    28/03/2020  豐原第一市場  45.0   60    25  25  ...  38  56  80  100  100    340
...          ...     ...   ...  ...   ...  ..  ...  ..  ..  ..  ...  ...    ...
1937  26/09/2020  豐原第一市場  35.0   60    45  40  ...  33  56  80  100  100     80
1949  27/09/2020  豐原第一市場  35.0   60    45  40  ...  33  56  80  100  100     80
1956  28/09/2020  豐原第一市場  35.0   60    45  40  ...  33  56  80  100  100     80
1968  29/09/2020  豐原第一市場  35.0   60    45  40  ...  33  56  80  100  100     80
1979  30/09/2020  豐原第一市場  35.0   60    45  40  ...  33  56  80  100  100     80

[188 rows x 63 columns]

資料量從原本的2012筆縮減為188筆,可以明顯看出索引的部份仍然是原本2012筆時的索引,因此這時候必須重設索引,請記住
時間序列的索引,就是時間
因此這裡要使用一個技巧,先把訪價日期欄位的資料型態轉為時間,再把這欄位設為索引

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt 

if __name__ == "__main__":
    data = pd.read_csv("./GOLD_109.csv")
    mask = data["市場名稱"] == "豐原第一市場"
    data = data[mask].copy()

    #將訪價日期欄位資料型態轉為時間
    data["訪價日期"] = pd.to_datetime(data["訪價日期"])

    data = data.set_index("訪價日期")
    print(data.index.dtype) #datetime64[ns]

接著我們可以縮小一些資料,我們來挑選市價比較高的品項就好市價太低的直接不納入分析目標,我們就以100為界,平均價格比200高的品項保留,其餘刪除

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt 

if __name__ == "__main__":
    data = pd.read_csv("./GOLD_109.csv")
    mask = data["市場名稱"] == "豐原第一市場"
    data = data[mask].copy()


    data["訪價日期"] = pd.to_datetime(data["訪價日期"])

    data = data.set_index("訪價日期")

    for i in data.columns[1:]:
        if data[i].mean() < 200:
            data = data.drop([i], axis = 1)

    print(data) 
              市場名稱  午仔魚   白蝦  腩肉_冷凍牛肉  鴨_土番鴨
訪價日期                                        
2020-03-24  豐原第一市場  380  200      240    340
2020-03-25  豐原第一市場  380  200      240    340
2020-03-26  豐原第一市場  380  200      240    340
2020-03-27  豐原第一市場  380  200      240    340
2020-03-28  豐原第一市場  380  200      240    340
...            ...  ...  ...      ...    ...
2020-09-26  豐原第一市場  208  192      240     80
2020-09-27  豐原第一市場  208  192      240     80
2020-09-28  豐原第一市場  208  192      240     80
2020-09-29  豐原第一市場  208  192      240     80
2020-09-30  豐原第一市場  208  192      240     80

[188 rows x 5 columns]

明天我們將會以上面的資料進行實做


上一篇
[Day22]人生百歲中-matplotlab圖表美化,帶你變成大藝術家
下一篇
[Day24]踏破千世笑紅塵-教你當緝毒犬,異常檢測
系列文
時間管理大師-時間序列分析終極密技30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言